home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- PATH=/bin:/usr/bin
- # f77-style shell script to compile and load fortran, C, and assembly codes
- # hacked to use -O6
-
- # usage: f77 [-g] [-O] [-o absfile] [-c] files [-l library]
-
- # -o objfile Override default executable name a.out.
-
- # -c Do not call linker, leave relocatables in *.o.
-
- # -C Check that subscripts are in bounds.
-
- # -S leave assembler output on file.s
-
- # -l library (passed to ld).
-
- # -u complain about undeclared variables
-
- # -w omit all warning messages
-
- # -w66 omit Fortran 66 compatibility warning messages
-
- # files FORTRAN source files ending in .f .
- # C source files ending in .c .
- # Assembly language files ending in .s .
-
- # -D def passed to C compiler (for .c files)
-
- # -I includepath passed to C compiler (for .c files)
-
- # -Ntnnn allow nnn entries in table t
-
- s=/tmp/stderr_$$
- t=/tmp/f77_$$.o
- CC=${CC_f2c:-'/usr/bin/cc'}
- F2C=${F2C:-/usr/bin/f2c}
- F2CFLAGS=${F2CFLAGS:='-ARw8 -Nn802'}
- rc=0
- trap "rm -f $s $t; exit \$rc" 0
- lib=/lib/num/lib.lo
- OUTF=a.out
- cOPT=1
- set -- `getopt cCD:gI:N:Oo:Suw6 "$@"`
- case $? in 0);; *) exit 1;; esac
- CCFLAGS=
- while
- test X"$1" != X--
- do
- case "$1"
- in
- -C) F2CFLAGS="$F2CFLAGS -C"
- shift;;
-
- -c) cOPT=0
- shift
- ;;
-
- -D) CCFLAGS="$CCFLAGS -D$2"
- shift 2
- ;;
-
- -g) CFLAGS="$CFLAGS -g"
- CCFLAGS="$CCFLAGS -g"
- F2CFLAGS="$F2CFLAGS -g"
- shift;;
-
- -I) CCFLAGS="$CCFLAGS -I$2"
- shift 2
- ;;
-
- -o) OUTF=$2
- shift 2
- ;;
-
- -O) case $2 in -1) O=-O1;; -2) O=-O2;; -3) O=-O3;; -6) O=-O6;; *) O=-O;; esac
- case $O in -O);; *) shift;; esac
- # lcc ignores -O...
- shift
- ;;
-
- -u) F2CFLAGS="$F2CFLAGS -u"
- shift
- ;;
-
- -w) F2CFLAGS="$F2CFLAGS -w"
- case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
- case $2 in -6) shift;; esac;; esac
- shift
- ;;
-
- -N) F2CFLAGS="$F2CFLAGS $1""$2"
- shift 2
- ;;
-
- -S) CFLAGS="$CFLAGS -S"
- cOPT=0
- shift
- ;;
-
- *)
- echo "invalid parameter $1" 1>&2
- shift
- ;;
- esac
- done
- shift
- while
- test -n "$1"
- do
- case "$1"
- in
- *.[fF])
- case "$1" in *.f) f=".f";; *.F) f=".F";; esac
- b=`basename $1 $f`
- $F2C $F2CFLAGS $1
- case $? in 0);; *) exit;; esac
- $CC -c $CFLAGS $b.c 2>$s
- rc=$?
- sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
- case $rc in 0);; *) exit;; esac
- OFILES="$OFILES $b.o"
- rm $b.c
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.s)
- echo $1: 1>&2
- OFILE=`basename $1 .s`.o
- ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
- case $? in 0);; *) exit;; esac
- OFILES="$OFILES $OFILE"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.c)
- echo $1: 1>&2
- OFILE=`basename $1 .c`.o
- $CC -c $CFLAGS $CCFLAGS $1
- rc=$?; case $rc in 0);; *) exit;; esac
- OFILES="$OFILES $OFILE"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- *.o)
- OFILES="$OFILES $1"
- case $cOPT in 1) cOPT=2;; esac
- shift
- ;;
- -l)
- OFILES="$OFILES -l$2"
- shift 2
- case $cOPT in 1) cOPT=2;; esac
- ;;
- -l*)
- OFILES="$OFILES $1"
- shift
- case $cOPT in 1) cOPT=2;; esac
- ;;
- -o)
- OUTF=$2; shift 2;;
- *)
- OFILES="$OFILES $1"
- shift
- case $cOPT in 1) cOPT=2;; esac
- ;;
- esac
- done
-
- case $cOPT in 2) $CC -o $OUTF -u MAIN__ $OFILES -lf2c -lm;; esac
- rc=$?
- exit $rc
-